package com.chenxin.interact.handler.mesHandler;

import com.chenxin.interact.domain.UrlMap;
import com.chenxin.interact.domain.mesRequest.MesTokenReqDTO;
import com.chenxin.interact.domain.mesResponse.MesTokenResponseDTO;
import com.chenxin.interact.domain.MesValue.MesTokenValue;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.client.WebClient;

import java.util.ArrayList;

@Slf4j
@Component
public class MesTokenHandler {
    public MesTokenResponseDTO requestToken(UrlMap urlMap, String method) {
        // 0.构建请求实体类
        MesTokenReqDTO dto = new MesTokenReqDTO();
        // 1.MES请求需要输入ApiType（token获取对应AuthenticationController）
        dto.setApiType(urlMap.getUrlParam());
        dto.setMethod(method);

        ArrayList<MesTokenValue> values = new ArrayList<>();
        values.add(new MesTokenValue(urlMap.getUsername()));
        values.add(new MesTokenValue(urlMap.getPassword()));
        dto.setParameters(values);
        log.info("WMS请求参数：{}", dto);
        // 1.构建WebClient
        WebClient client = WebClient.builder().baseUrl(urlMap.getUrlAdr())
                .defaultHeader("Content-Type", "application/json").build();
        // 2.发送POST请求
        MesTokenResponseDTO response = client.post()
                .uri(urlMap.getUriAdr())
                .bodyValue(dto)
                .retrieve()
                .bodyToMono(MesTokenResponseDTO.class)
                .block();
        // 3.将接收到的物料信息写入数据库
        assert response != null;
        log.info("MES返回的token信息为：{}", response);
        return response;
    }
}
